Programming bugs caused by incorrectly using memory operations are very common in practice, especially on computer systems that use a parallel architecture. It may be very difficult to find the root causes of such memory errors. Common memory errors often fall into one of three different types: 1) reading un-initialized memory; 2) accessing memory over a boundary; and 3) memory leak.
In addition, parallel architectures can give rise to other types of memory errors, such as data racing. Data racing may occur, for example, when one processor uses a split-phased memory operation to issue a write command When the write command is issued, it takes the data a few cycles to reach the memory controller. In the meantime, the processor sends a signal to inform another processor that it can start to read the data. If there are separate read and write buses in the multiprocessor system, and if the read command issued by the other processor arrives at the memory controller faster than the write command (going through different buses in a multi-processor system), then the read will receive the previous data rather than the just written data. Data racing may also cause errors when one processor writes memory data and two other processors read the memory data. If another processor re-writes the same memory with new data before the other two processors finish the read operation, then, the unfinished read processors will read out the wrong data.